package middleware

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func AllowCrossDomain(c *gin.Context) {
	// 允许的域名列表
	allowedOrigins := map[string]bool{
		"http://localhost:3000":        true,
		"http://test-admin.yo-bu.com/": true,
	}

	r := c.Request
	w := c.Writer

	// 获取请求的 Origin
	requestOrigin := r.Header.Get("Origin")

	// 检查是否在允许的域名列表中
	if allowedOrigins[requestOrigin] {
		w.Header().Set("Access-Control-Allow-Origin", requestOrigin)
	}

	// 允许的请求头（必须包含 Authorization）
	w.Header().Add("Access-Control-Allow-Headers", "Content-Type")
	w.Header().Add("Access-Control-Allow-Headers", "Authorization")
	w.Header().Add("Access-Control-Allow-Headers", "x-user-id")
	w.Header().Add("Access-Control-Allow-Headers", "x-shop-id")
	w.Header().Add("Access-Control-Allow-Headers", "app-uuid")

	// 允许的 HTTP 方法
	w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")

	// 允许携带 Cookie/token
	w.Header().Set("Access-Control-Allow-Credentials", "true")

	// 预检请求缓存时间（20 天）
	w.Header().Set("Access-Control-Max-Age", "1728000")

	// 如果是 OPTIONS 请求（预检请求），直接返回 204
	if r.Method == "OPTIONS" {
		c.AbortWithStatus(http.StatusNoContent)
		return
	}

	// 继续处理后续请求
	c.Next()

}

func CORS() gin.HandlerFunc {
	return func(c *gin.Context) {
		AllowCrossDomain(c)
		c.Next()
	}
}
